home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
vdgear
/
src
/
key.c
< prev
next >
Wrap
Text File
|
1994-11-16
|
3KB
|
204 lines
/*
* VIDEO GEAR
* "key.c"
* by Good-Chy
*/
#include "video.h"
#define is_kanji1(c) ((0x81<=c && c<=0x9f) || (0xe0<=c && c<=0xfc))
#define is_kanji2(c) ((0x40<=c && c<=0x7e) || (0x80<=c && c<=0xfc))
char tanmoji[] = "単語登録のための文字列";
void cursor_dsp(int flag)
{
int sx;
sx = key_x+ key_cursor*6 + 1;
EGB_paintMode(egb_work,0x22);
if (flag == 0) /* 消去 */
{
box_full(sx,key_y+1,sx+1,key_y+13,4,4,0);
}
else
{
box_full(sx,key_y+1,sx+1,key_y+13,10,10,0);
}
}
void print(int flag, char *moji)
{
int sx, vec;
sx = key_x + key_cursor*6 + 1;
EGB_paintMode(egb_work,0x22);
cursor_dsp(0);
if (flag == 1) /* 漢字 */
{
box_full(sx,key_y+1,sx+11,key_y+12,4,4,0);
*(key_buff+key_cursor ) = *(moji+0);
*(key_buff+key_cursor+1) = *(moji+1);
vec = 2;
}
else
{
box_full(sx,key_y+1,sx+ 5,key_y+12,4,4,0);
*(key_buff+key_cursor) = *(moji+0);
vec = 1;
}
sprint(moji,sx,key_y+13,15,0,12,12,0);
key_cursor += vec;
cursor_dsp(1);
}
void elase(int flag)
{
int i,sx;
EGB_paintMode(egb_work,0x22);
cursor_dsp(0);
for (i=0 ; i<flag ; i++)
{
key_cursor--;
sx = key_x + key_cursor*6 + 1;
box_full(sx,key_y+1,sx+5,key_y+13,4,4,0);
*(key_buff+key_cursor) = '\0';
}
cursor_dsp(1);
}
void line_input()
{
unsigned int str, strs, encode;
char moji[3];
str = KYB_read(1,&encode);
if ((str & 0xff) != 0xff)
{
if (((str & 0xff) >= ' ') && ((str & 0xff) != 0x7f))
{
if (is_kanji1(str))
{
strs = KYB_read(1,&encode);
if (key_cursor < key_len-1)
{
moji[0] = str;
moji[1] = strs;
moji[2] = '\0';
print(1,moji);
}
}
else
{
if (key_cursor < key_len)
{
moji[0] = str;
moji[1] = '\0';
print(0,moji);
}
}
}
else
{
if ((str & 0xff) == 0x08) /*BS*/
{
if (key_cursor-2 >= 0)
{
if (is_kanji1(*(key_buff+key_cursor-2)) &&
(is_kanji2(*key_buff+key_cursor-1)))
{
elase(2);
}
else
{
elase(1);
}
}
else
{
if (key_cursor-1 >= 0)
{
elase(1);
}
}
}
}
}
}
void GetString(char *code)
{
int len;
strcpy(code, tanmoji);
len = strlen(tanmoji);
memset(&code[len], '\0', 80-len);
}
void GetDspPos(int *x, int *y)
{
*x = key_x + key_cursor*6+1;
*y = key_y + 1;
}
void kana_init() /* 仮名漢字の初期化 */
{
KANJ prm;
prm.scrn = KAN_SCRN16;
prm.egbw = egb_work;
prm.wPage = 0;
prm.mosAp = KAN_MOSON;
prm.gets = GetString;
prm.getPos = GetDspPos;
prm.maxX = 639;
prm.maxY = 479;
KAN_prepare(&prm);
KYB_init();
KYB_clic(1);
}
void kana_end() /* 仮名漢字の終了 */
{
KAN_finish();
}
void key_buff_clear()
{
int i;
cursor_dsp(0);
box_full(key_x+1,key_y+1,key_x+key_len*6+6,key_y+13,4,4,0);
for (i=0 ; i<80 ; i++)
{
key_buff[i] = '\0';
}
key_cursor = 0;
cursor_dsp(1);
}
void key_start(int x, int y, int len)
{
key_flag = 1;
key_len = len;
key_x = x;
key_y = y;
KAN_disp(KAN_DISPON);
key_buff_clear();
}
void key_end()
{
key_flag = 0;
KAN_disp(KAN_DISPOFF);
cursor_dsp(0);
}